package com.chc.web.user.entity;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import org.springframework.security.core.GrantedAuthority;
import org.springframework.security.core.userdetails.UserDetails;

import javax.validation.constraints.NotBlank;
import javax.validation.constraints.Pattern;
import java.io.Serializable;
import java.util.Collection;

/**
 * Created with IntelliJ IDEA
 *
 * @Author: chc
 * @Date: 2021/12/19/20:56
 * @Description:
 */
@Data
@TableName("sys_user")
public class User implements UserDetails,Serializable {
    //设置主键自增
    @TableId(type= IdType.AUTO)
    private Long userId;

    //校验登陆名
    @NotBlank
//    @Pattern(regexp="(^[a-zA-Z0-9_-]{6,16}$)|(^[\u2E80-\u9FFF]{2,5})"
//            ,message="登陆名必须是2-5位中文或者6-16位英文和数字的组合")
    //登录名
    private String loginName;

    //登录密码
    private String password;

    //校验姓名
    @NotBlank
    @Pattern(regexp="(^[a-zA-Z0-9_-]{6,16}$)|(^[\u2E80-\u9FFF]{2,5})"
            ,message="用户名必须是2-5位中文或者6-16位英文和数字的组合")
    //姓名
    private String username;

    //校验电话号码
    @NotBlank
    @Pattern(regexp = "(^1(?:3\\d|4[4-9]|5[0-35-9]|6[67]|7[013-8]|8\\d|9\\d)\\d{8}$)",message = "电话号码格式错误")
    //电话
    private String phone;

    //性别 0：女 1：男
    @NotBlank //验证字符串非null，且长度必须大于0
    private String sex;

    //校验身份证格式
    @NotBlank
    @Pattern(regexp = "^[1-9][0-9]{5}(18|19|20)[0-9]{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)[0-9]{3}([0-9]|(X|x))",message = "身份证格式错误")
    //身份证
    private String idCard;


    //是否是管理员 0：不是 1：是
    private String isAdmin;

    //0：在职  1：离职
    @NotBlank //验证字符串非null，且长度必须大于0
    private String status;

    //0：启用 1：禁用
    @NotBlank //验证字符串非null，且长度必须大于0
    private String isUsed;

    //帐户是否过期(1 未过期，0已过期)
    private boolean isAccountNonExpired = true;
    //帐户是否被锁定(1 未锁定，0已锁定)
    private boolean isAccountNonLocked = true;
    //密码是否过期(1 未过期，0已过期)
    private boolean isCredentialsNonExpired = true;
    //帐户是否可用(1 可用，0 删除用户)
    private boolean isEnabled = true;
    //由于authorities不是数据库里面的字段，所以要排除他，不然mybatis-plus找不到该字段会报错
    @TableField(exist = false)
    Collection<? extends GrantedAuthority> authorities;
}
